package com.cskaoyan._02sync;

/**
 * @description:
 * @author: 景天
 * @date: 2023/2/22 11:33
 **/
/*
出现异常的时候会释放锁
 */
public class Demo5 {
    // 定义一把锁
    public static final Object OBJECT = new Object();
    public static int count = 0;
    public static void main(String[] args) {
        // 创建并启动一个线程
        new Thread(()->{
            // 使用同步代码块
            synchronized (OBJECT) {
                // 循环
                while (true) {
                    System.out.println("t1这个线程进入到sync");
                    count++;
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    if (count == 8) {
                        System.out.println("count:"+count);
                        // 制造一个异常
                        System.out.println(10/0);
                    }
                }
            }
        },"t1").start();

        // main睡眠1s 为了让第一个线程先执行
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        // 创建并启动一个线程
        new Thread(()->{
            System.out.println("t2线程执行了");
            // 使用sync
            synchronized (OBJECT) {
                System.out.println("t2线程进入sync中");
            }
            System.out.println("t2线程退出sync");
        },"t2").start();
    }
}
